//
//  ObserViewController.swift
//  SwiftRx研究
//
//  Created by 世霖 on 2020/7/11.
//  Copyright © 2020 世霖. All rights reserved.
//

import UIKit
import RxSwift
import RxCocoa

class ObserViewController: UIViewController {
    let disposeBge = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .white
//        let observable = Observable.of("1" , "2")
        
//        //手动订阅和取消
//        let subscription = observable.subscribe{ event in
//            print(event)
//        }
//        subscription.dispose()
//
//
//        //获取对应的内容
//        observable.subscribe{ event in
//            print(event.element)
//
//        }.disposed(by: disposeBge)
//
//        observable.subscribe(onNext: { (event ) in
//            print(event)
//        }, onError: { (errpr) in
//            print(errpr)
//        }, onCompleted: {
//            print("com")
//        }, onDisposed:  {
//            print("dis")
//            }).disposed(by: disposeBge)
   
        
        
////        StartWith
//        Observable.of(2  , 3)
//        .startWith(1)
//            .subscribe(onNext: {
//                print($0) })
//        .disposed(by: disposeBge)
            
//        插入数据，回头是倒序处理，先从最后一个代码段处理
        
//        Observable.of(2  , 3)
//        .startWith(1)
//        .startWith(2)
//        .startWith(5)
//            .subscribe(onNext: {
//                print($0) })
//        .disposed(by: disposeBge)
            
        
//        MERGE 可以僵多个Onservable序列合并组成一个Observable序列
        
        
//
//        let subject1 = PublishSubject<Int>()
//        let subject2 = PublishSubject<Int>()
//
//        Observable.of(subject1 , subject2)
//        .merge()
//            .subscribe(onNext: {
//                print($0)
//            })
//        .disposed(by: disposeBge)
//
//
//        subject1.onNext(20)
//
//        12 : s算数 以及聚合操作，
//        toArray  -先把一个序列转化为数组，并作为一个单一的事件发送
        
        
        Observable.of(1 , 2 , 3)
        .toArray()
        
//        Reduce 接受一个初始值，和一个操作符号
        Observable.of(1 , 2 )
        .reduce(0, accumulator: +)
            .subscribe(onNext: {
                print($0)
        })
        .disposed(by: disposeBge)
        
//        3 Concat 会吧多个Observable序列合并，串联成为一个Obserable队列
        let subject3 = BehaviorSubject(value: 1)
        let subject4 = BehaviorSubject(value: 3)
        
        let variable = Variable(subject3)
        variable.asObservable()
        .concat()
        .subscribe(onNext: {
            print($0)
        })
        .disposed(by: disposeBge)
        
        
//        13:链接操作 （Connectable Observable Operators）
        let interval = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
        _ = interval.subscribe(onNext: { (event ) in
            print(event)
        })
    
////        第二个订阅者
//        delay(5) {
//
//        }
        
//        延迟执行的方法
//        REplay的方法
//        需要使用connect的方法进行排列
        
        
        
        
        
        
        
    }

    
    
    

}
